package main.java.BLT;

import java.io.IOException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Random;

import main.java.Utiles.FlujoEntrada;



public class Mazo extends ArrayList<Carta> {


	private static final long serialVersionUID = 1L;
	private ArrayList<Carta> cartas;
	private static Random genAleatorios = new Random();
	private String descripcion;

	
	public Mazo(){
		cartas = new ArrayList<Carta>();
		descripcion = "";
	}
	
	public Mazo(String descripcion, ArrayList<Carta> m){
		if(!(descripcion.equals("Lider") ||descripcion.equals("Ejercito") ||descripcion.equals("Especial") ||descripcion.equals("Tactica"))){
			throw new IllegalArgumentException("La descripcion debe ser: Lider, Ejercito, Especial o Tactica");
		}
		cartas = m;
		this.descripcion = descripcion;
		
	}
	
	public Mazo (String ruta, String descripcion) throws IOException{
		Iterable <String> its = new FlujoEntrada(ruta);
		ArrayList<Carta> alc = new ArrayList<Carta>(); 
		Carta c = null;
		for(String s: its){
			if(descripcion.equals("Lider")){
				c =  new Lider(s);
			}
			if(descripcion.equals("Tactica")){
				c =  new Tactica(s);
			}
			if(descripcion.equals("Ejercito")){
				c =  new Ejercito(s);
			}
			if(descripcion.equals("Especial")){
				c =  new Especial(s);
			}
			alc.add(c);	
		}
		cartas = alc;
		this.descripcion = descripcion;
	}
	
	public ArrayList<Carta> getCartas(){
		return cartas;
	}
	
	public static void setRandomSeed(long seed) {
		genAleatorios = new Random(seed);
	}

	public void mezcla() { 
		Collections.shuffle(this.getCartas(), genAleatorios);
	}
	
	public void ordena() {
		Collections.sort(this.getCartas());
	}    

	public Carta sacarCartaEn(int posicion) {
		if(posicion<0){
			throw new IllegalArgumentException("La posicion no puede ser negativa");
		}
		if(cartas.size()==0){
			throw new IllegalArgumentException("El ArrayList esta vacio");
		}
		return cartas.get(posicion);
	}

	public Carta sacaCartaPrimera() {
		return cartas.remove(0);
	}

	public Carta sacarCartaUltima(){	
		return cartas.remove(cartas.size()-1);
	}

	public void meterCartaUltima(Carta c) {
		cartas.add(c);
	}

	public String getDescripcion() {
		return descripcion;
	}

	public void setDescripcion(String descripcion) {
		if(!(descripcion.equals("Líder") ||descripcion.equals("Ejercito") ||descripcion.equals("Especial") ||descripcion.equals("Táctica"))){
			throw new IllegalArgumentException("La descripcion debe ser: Lider, Ejercito, Especial o Tactica");
		}
		this.descripcion = descripcion;
	}

	public String toString() {
		return "Mazo [cartas=" + cartas + "" + ", descripcion=" + descripcion + "]";
	}
	
	


}